const HighNumber = require("./HighNumber");

// ut8数组转字符串
function utf8Decode(byteArray) {
  let str = '';
  let i = 0;
  while (i < byteArray.length) {
    let byte1 = byteArray[i++];
    if (byte1 < 128) {
      str += String.fromCharCode(byte1);
    } else if (byte1 < 224) {
      // 双字节字符
      let byte2 = byteArray[i++];
      let charCode = ((byte1 & 31) << 6) | (byte2 & 63);
      str += String.fromCharCode(charCode);
    } else if (byte1 < 240) {
      // 三字节字符
      let byte2 = byteArray[i++];
      let byte3 = byteArray[i++];
      let charCode = ((byte1 & 15) << 12) | ((byte2 & 63) << 6) | (byte3 & 63);
      str += String.fromCharCode(charCode);
    } else {
      // 四字节字符（较罕见，暂不深入处理复杂情况，可按需完善）
      i += 3;
    }
  }
  return str;
}

// 字符串utf8数组
function utf8Encode(str) {
  let byteArray = [];
  for (let i = 0; i < str.length; i++) {
    let charCode = str.charCodeAt(i);
    console.log(HighNumber.toString(charCode, HighNumber.MAX_BASE))
    if (charCode < 128) {
      byteArray.push(charCode);
    } else if (charCode < 2048) {
      byteArray.push((charCode >> 6) | 192);
      byteArray.push((charCode & 63) | 128);
    } else {
      byteArray.push((charCode >> 12) | 224);
      byteArray.push(((charCode >> 6) & 63) | 128);
      byteArray.push((charCode & 63) | 128);
    }
  }
  return byteArray;
}

const codes = utf8Encode("中");
console.log(codes)
const s = utf8Decode(codes);
console.log(s)
console.log(new TextEncoder().encode("中"))